From: Tamas K Lengyel Date: Thu, 7 Jul 2016 12:25:50 +0000 (+0200) Subject: monitor: rename and relocate vm_event_monitor_traps X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~827 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=828587944cbc5854b414f98bcd0bc5181f87825e;p=xen.git monitor: rename and relocate vm_event_monitor_traps The function vm_event_monitor_traps actually belongs in the monitor subsystem. As part of this patch we fix the sync input's type to bool_t to match how the callers use it. Signed-off-by: Tamas K Lengyel Acked-by: Razvan Cojocaru --- diff --git a/xen/arch/x86/hvm/monitor.c b/xen/arch/x86/hvm/monitor.c index bbe5952b32..fb493bbcaf 100644 --- a/xen/arch/x86/hvm/monitor.c +++ b/xen/arch/x86/hvm/monitor.c @@ -23,6 +23,7 @@ */ #include +#include #include #include #include @@ -48,7 +49,7 @@ bool_t hvm_monitor_cr(unsigned int index, unsigned long value, unsigned long old .u.write_ctrlreg.old_value = old }; - if ( vm_event_monitor_traps(curr, sync, &req) >= 0 ) + if ( monitor_traps(curr, sync, &req) >= 0 ) return 1; } @@ -68,7 +69,7 @@ void hvm_monitor_msr(unsigned int msr, uint64_t value) .u.mov_to_msr.value = value, }; - vm_event_monitor_traps(curr, 1, &req); + monitor_traps(curr, 1, &req); } } @@ -131,7 +132,7 @@ int hvm_monitor_debug(unsigned long rip, enum hvm_monitor_debug_type type, req.vcpu_id = curr->vcpu_id; - return vm_event_monitor_traps(curr, sync, &req); + return monitor_traps(curr, sync, &req); } /* diff --git a/xen/common/monitor.c b/xen/common/monitor.c index 436214a055..5fce61ebee 100644 --- a/xen/common/monitor.c +++ b/xen/common/monitor.c @@ -19,12 +19,15 @@ * License along with this program; If not, see . */ +#include #include #include #include #include #include +#include #include +#include int monitor_domctl(struct domain *d, struct xen_domctl_monitor_op *mop) { @@ -85,6 +88,45 @@ int monitor_domctl(struct domain *d, struct xen_domctl_monitor_op *mop) return 0; } +int monitor_traps(struct vcpu *v, bool_t sync, vm_event_request_t *req) +{ + int rc; + struct domain *d = v->domain; + + rc = vm_event_claim_slot(d, &d->vm_event->monitor); + switch ( rc ) + { + case 0: + break; + case -ENOSYS: + /* + * If there was no ring to handle the event, then + * simply continue executing normally. + */ + return 0; + default: + return rc; + }; + + if ( sync ) + { + req->flags |= VM_EVENT_FLAG_VCPU_PAUSED; + vm_event_vcpu_pause(v); + rc = 1; + } + + if ( altp2m_active(d) ) + { + req->flags |= VM_EVENT_FLAG_ALTERNATE_P2M; + req->altp2m_idx = altp2m_vcpu_idx(v); + } + + vm_event_fill_regs(req); + vm_event_put_request(d, &d->vm_event->monitor, req); + + return rc; +} + void monitor_guest_request(void) { struct vcpu *curr = current; @@ -97,7 +139,7 @@ void monitor_guest_request(void) .vcpu_id = curr->vcpu_id, }; - vm_event_monitor_traps(curr, d->monitor.guest_request_sync, &req); + monitor_traps(curr, d->monitor.guest_request_sync, &req); } } diff --git a/xen/common/vm_event.c b/xen/common/vm_event.c index 17d27166b6..22bbfc112a 100644 --- a/xen/common/vm_event.c +++ b/xen/common/vm_event.c @@ -26,7 +26,6 @@ #include #include #include -#include #include #include #include @@ -788,50 +787,6 @@ void vm_event_vcpu_unpause(struct vcpu *v) vcpu_unpause(v); } -/* - * Monitor vm-events - */ - -int vm_event_monitor_traps(struct vcpu *v, uint8_t sync, - vm_event_request_t *req) -{ - int rc; - struct domain *d = v->domain; - - rc = vm_event_claim_slot(d, &d->vm_event->monitor); - switch ( rc ) - { - case 0: - break; - case -ENOSYS: - /* - * If there was no ring to handle the event, then - * simply continue executing normally. - */ - return 0; - default: - return rc; - }; - - if ( sync ) - { - req->flags |= VM_EVENT_FLAG_VCPU_PAUSED; - vm_event_vcpu_pause(v); - rc = 1; - } - - if ( altp2m_active(d) ) - { - req->flags |= VM_EVENT_FLAG_ALTERNATE_P2M; - req->altp2m_idx = altp2m_vcpu_idx(v); - } - - vm_event_fill_regs(req); - vm_event_put_request(d, &d->vm_event->monitor, req); - - return rc; -} - /* * Local variables: * mode: C diff --git a/xen/include/xen/monitor.h b/xen/include/xen/monitor.h index 204d5cc424..2171d04490 100644 --- a/xen/include/xen/monitor.h +++ b/xen/include/xen/monitor.h @@ -3,7 +3,7 @@ * * Common monitor_op domctl handler. * - * Copyright (c) 2015 Tamas K Lengyel (tamas@tklengyel.com) + * Copyright (c) 2015-2016 Tamas K Lengyel (tamas@tklengyel.com) * Copyright (c) 2016, Bitdefender S.R.L. * * This program is free software; you can redistribute it and/or @@ -22,10 +22,14 @@ #ifndef __XEN_MONITOR_H__ #define __XEN_MONITOR_H__ +#include + struct domain; struct xen_domctl_monitor_op; int monitor_domctl(struct domain *d, struct xen_domctl_monitor_op *op); void monitor_guest_request(void); +int monitor_traps(struct vcpu *v, bool_t sync, vm_event_request_t *req); + #endif /* __XEN_MONITOR_H__ */ diff --git a/xen/include/xen/vm_event.h b/xen/include/xen/vm_event.h index 89e6243f4b..42bd9f659c 100644 --- a/xen/include/xen/vm_event.h +++ b/xen/include/xen/vm_event.h @@ -75,12 +75,6 @@ int vm_event_domctl(struct domain *d, xen_domctl_vm_event_op_t *vec, void vm_event_vcpu_pause(struct vcpu *v); void vm_event_vcpu_unpause(struct vcpu *v); -/* - * Monitor vm-events - */ -int vm_event_monitor_traps(struct vcpu *v, uint8_t sync, - vm_event_request_t *req); - #endif /* __VM_EVENT_H__ */